package com.mlf.prototype.spring;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

// 单例Bean - 使用Scoped Proxy
@Component
public class SingletonWithScopedProxy {

    @Autowired
    private PrototypeBeanWithProxy prototypeBean;

    public void demonstratePrototype() {
        // 注意：这里直接使用字段，但每次方法调用时Spring会创建新实例
        System.out.println("Using Scoped Proxy:");
        System.out.println("Bean 1: " + prototypeBean.getIdentity());

        // 为了演示，我们再次调用
        System.out.println("Bean 2: " + prototypeBean.getIdentity());

        // 注意：注入的PrototypeBeanWithProxy实际上是一个代理对象（单例）
        // 但每次调用其方法时，Spring会通过代理创建新的目标实例
        // 因此，prototypeBean引用本身是单例代理，但方法调用作用于新实例
        // 直接比较代理引用（prototypeBean == prototypeBean）始终为true
        // 但方法调用会反映出不同实例的状态，因为背后是不同的实例
    }
}
